Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


sbapp/kivymd/effects/fadingedge/fadingedge.py 2dcc759c88f3f2471ffcf6146721200a16aadede (2dcc759c) Text, 6.05 KB

T8b949e"""
Effects/FadingEdgeEffect
========================

.. versionadded:: 1.0.0

The `FadingEdgeEffect` class implements a fade effect for `KivyMD` widgets:

.. code-block:: python

from kivy.lang import Builder
from kivy.uix.scrollview import ScrollView

from kivymd.app import MDApp
from kivymd.effects.fadingedge.fadingedge import FadingEdgeEffect
from kivymd.uix.list import OneLineListItem

KV = '''
MDScreen:

FadeScrollView:
fade_height: self.height / 2
fade_color: root.md_bg_color

MDList:
id: container
'''


class FadeScrollView(FadingEdgeEffect, ScrollView):
pass


class Test(MDApp):
def build(self):
return Builder.load_string(KV)

def on_start(self):
for i in range(20):
self.root.ids.container.add_widget(
OneLineListItem(text=f"Single-line item {i}")
)


Test().run()

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/fading-edge-effect-white.gif
:align: center

.. note:: Use the same color value for the fade_color parameter as for the
parent widget.
"""

Tff7b72from T7ee787typing Tff7b72import Te6edf3Union

Tff7b72from T7ee787kivyT7ee787.T7ee787clock Tff7b72import Te6edf3Clock
Tff7b72from T7ee787kivyT7ee787.T7ee787graphicsT7ee787.T7ee787context_instructions Tff7b72import Te6edf3Color
Tff7b72from T7ee787kivyT7ee787.T7ee787graphicsT7ee787.T7ee787vertex_instructions Tff7b72import Te6edf3Rectangle
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dp
Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Te6edf3BooleanPropertyTb4b4b4, Te6edf3ColorPropertyTb4b4b4, Te6edf3NumericProperty

Tff7b72from T7ee787kivymdT7ee787.T7ee787theming Tff7b72import Te6edf3ThemableBehavior

Te6edf3__all_ Tff7b72= Tb4b4b4(Ta5d6ff"Ta5d6ffFadingEdgeEffectTa5d6ff"Tb4b4b4,Tb4b4b4)


Tff7b72class T56d364FadingEdgeEffectTb4b4b4(Te6edf3ThemableBehaviorTb4b4b4)Tb4b4b4:
T8b949e"""
The class implements the fade effect.

.. versionadded:: 1.0.0
"""

Te6edf3fade_color Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
T8b949e"""
Fade color.

:attr:`fade_color` is an :class:`~kivy.properties.ColorProperty`
and defaults to `None`.
"""

Te6edf3fade_height Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
T8b949e"""
Fade height.

:attr:`fade_height` is an :class:`~kivy.properties.ColorProperty`
and defaults to `0`.
"""

Te6edf3edge_top Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72TrueTb4b4b4)
T8b949e"""
Display fade edge top.

:attr:`edge_top` is an :class:`~kivy.properties.BooleanProperty`
and defaults to `True`.
"""

Te6edf3edge_bottom Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72TrueTb4b4b4)
T8b949e"""
Display fade edge bottom.

:attr:`edge_bottom` is an :class:`~kivy.properties.BooleanProperty`
and defaults to `True`.
"""

Te6edf3_height_segment Tff7b72= T79c0ff10

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffset_fadeTb4b4b4)

T8b949e# TODO: Perhaps it would be better if we used a Shader for the fade effect.
T8b949e# But, I think the canvas instructions shouldn't affect performance
Tff7b72def Td2a8ffset_fadeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3intervalTb4b4b4: Te6edf3UnionTb4b4b4[Tffa657intTb4b4b4, Tffa657floatTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Draws a bottom and top fade border on the canvas."""

Te6edf3fade_color Tff7b72= Tb4b4b4(
Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8ffprimary_color
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8fffade_color
Tff7b72else Tff7b72selfTff7b72.Td2a8fffade_color
Tb4b4b4)
Te6edf3height_segment Tff7b72= Tb4b4b4(
Tff7b72selfTff7b72.Td2a8fffade_height Tff7b72if Tff7b72selfTff7b72.Td2a8fffade_height Tff7b72else Te6edf3dpTb4b4b4(T79c0ff100Tb4b4b4)
Tb4b4b4) Tff7b72/Tff7b72/ Tff7b72selfTff7b72.Td2a8ff_height_segment
Te6edf3alpha Tff7b72= T79c0ff1.1

Tff7b72with Tff7b72selfTff7b72.Td2a8ffcanvasTb4b4b4:
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_height_segmentTb4b4b4)Tb4b4b4:
Te6edf3alpha Tff7b72-Tff7b72= T79c0ff0.1

Te6edf3ColorTb4b4b4(Te6edf3rgbaTff7b72=Tb4b4b4(Te6edf3fade_colorTb4b4b4[Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4] Tff7b72+ Tb4b4b4[Tffa657roundTb4b4b4(Te6edf3alphaTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4]Tb4b4b4)Tb4b4b4)
Te6edf3rectangle_top Tff7b72= Tb4b4b4(
Te6edf3RectangleTb4b4b4(
Te6edf3posTff7b72=Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffxTb4b4b4, Tff7b72selfTff7b72.Td2a8ffheight Tff7b72- Tb4b4b4(Te6edf3i Tff7b72* Te6edf3height_segmentTb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3sizeTff7b72=Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffwidthTb4b4b4, Te6edf3height_segmentTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffedge_top
Tff7b72else Tff7b72None
Tb4b4b4)
Te6edf3rectangle_bottom Tff7b72= Tb4b4b4(
Te6edf3RectangleTb4b4b4(
Te6edf3posTff7b72=Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffxTb4b4b4, Te6edf3i Tff7b72* Te6edf3height_segmentTb4b4b4)Tb4b4b4,
Te6edf3sizeTff7b72=Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffwidthTb4b4b4, Te6edf3height_segmentTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffedge_bottom
Tff7b72else Tff7b72None
Tb4b4b4)
T8b949e# How I hate lambda functions because of their length :(
T8b949e# But I don’t want to call the arguments by short,
T8b949e# incomprehensible names 'a', 'b', 'c'.
Tff7b72selfTff7b72.Td2a8ffbindTb4b4b4(
Te6edf3posTff7b72=Tff7b72lambda Te6edf3instance_fadind_edge_effectTb4b4b4, Te6edf3window_sizeTb4b4b4, Te6edf3rectangle_topTff7b72=Te6edf3rectangle_topTb4b4b4, Te6edf3rectangle_bottomTff7b72=Te6edf3rectangle_bottomTb4b4b4, Te6edf3indexTff7b72=Te6edf3iTb4b4b4: Tff7b72selfTff7b72.Td2a8ffupdate_canvasTb4b4b4(
Te6edf3instance_fadind_edge_effectTb4b4b4,
Te6edf3window_sizeTb4b4b4,
Te6edf3rectangle_topTb4b4b4,
Te6edf3rectangle_bottomTb4b4b4,
Te6edf3indexTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3sizeTff7b72=Tff7b72lambda Te6edf3instance_fadind_edge_effectTb4b4b4, Te6edf3window_sizeTb4b4b4, Te6edf3rectangle_topTff7b72=Te6edf3rectangle_topTb4b4b4, Te6edf3rectangle_bottomTff7b72=Te6edf3rectangle_bottomTb4b4b4, Te6edf3indexTff7b72=Te6edf3iTb4b4b4: Tff7b72selfTff7b72.Td2a8ffupdate_canvasTb4b4b4(
Te6edf3instance_fadind_edge_effectTb4b4b4,
Te6edf3window_sizeTb4b4b4,
Te6edf3rectangle_topTb4b4b4,
Te6edf3rectangle_bottomTb4b4b4,
Te6edf3indexTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_canvasTb4b4b4(
Tff7b72selfTb4b4b4, Tff7b72selfTff7b72.Td2a8ffsizeTb4b4b4, Te6edf3rectangle_topTb4b4b4, Te6edf3rectangle_bottomTb4b4b4, Te6edf3i
Tb4b4b4)

Tff7b72def Td2a8ffupdate_canvasTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3instance_fadind_edge_effectTb4b4b4,
Te6edf3sizeTb4b4b4: Tffa657listTb4b4b4[Tffa657intTb4b4b4, Tffa657intTb4b4b4]Tb4b4b4,
Te6edf3rectangle_topTb4b4b4: Te6edf3RectangleTb4b4b4,
Te6edf3rectangle_bottomTb4b4b4: Te6edf3RectangleTb4b4b4,
Te6edf3indexTb4b4b4: Tffa657intTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""
Updates the position and size of the fade border on the canvas.
Called when the application screen is resized.
"""

Te6edf3height_segment Tff7b72= Tb4b4b4(
Tff7b72selfTff7b72.Td2a8fffade_height Tff7b72if Tff7b72selfTff7b72.Td2a8fffade_height Tff7b72else Te6edf3dpTb4b4b4(T79c0ff100Tb4b4b4)
Tb4b4b4) Tff7b72/Tff7b72/ Tff7b72selfTff7b72.Td2a8ff_height_segment

Tff7b72if Te6edf3rectangle_topTb4b4b4:
Te6edf3rectangle_topTff7b72.Td2a8ffpos Tff7b72= Tb4b4b4(
Te6edf3instance_fadind_edge_effectTff7b72.Td2a8ffxTb4b4b4,
Te6edf3sizeTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72- Tb4b4b4(Te6edf3index Tff7b72* Te6edf3height_segment Tff7b72- Te6edf3instance_fadind_edge_effectTff7b72.Td2a8ffyTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3rectangle_topTff7b72.Td2a8ffsize Tff7b72= Tb4b4b4(Te6edf3sizeTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3height_segmentTb4b4b4)
Tff7b72if Te6edf3rectangle_bottomTb4b4b4:
Te6edf3rectangle_bottomTff7b72.Td2a8ffpos Tff7b72= Tb4b4b4(
Te6edf3instance_fadind_edge_effectTff7b72.Td2a8ffxTb4b4b4,
Te6edf3index Tff7b72* Te6edf3height_segment Tff7b72+ Te6edf3instance_fadind_edge_effectTff7b72.Td2a8ffyTb4b4b4,
Tb4b4b4)
Te6edf3rectangle_bottomTff7b72.Td2a8ffsize Tff7b72= Tb4b4b4(Te6edf3sizeTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3height_segmentTb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────